<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //1. 对象拷贝
        // 这里只有一个对象。就像我们有个带两把钥匙的锁柜，并使用其中一把钥匙（admin）来打开它。
        // 那么，我们如果之后用另外一把钥匙（user），就也能看到所作的改变。
        var user = {name:"join"};
        var admin = user ;//拷贝引用
        admin.name = "Pate"; //通过"admin"引用来修改
        alert(user.name); //"Pate",修改能通过"user"引用看到 

        //2. 通过引用来比较
        // 对于对象来说，普通相等 == 和严格相等 === 是两个作用结果完全一样的运算符。

        // 仅当两个对象为同一对象时，两者才相等。
        // 这里两个变量都引用同一个对象，所以它们相等：
        var a = {};
        var b = a;// 拷贝引用
        alert(a == b);// true，都引用同一对象
        alert(a === b);// true

        // // 而这里两个独立的对象则并不相等，即使它们都为空：
        var a = {};
        var b = {};// 两个独立的对象
        alert(a == b);// false


        //3. 对象克隆
        var user = {
            name: "John",
            age: 30
        };

        // 浅拷贝
        var clone = {}; // 新的空对象

        // 将 user 中所有的属性拷贝到其中
        for (var key in user) {
            clone[key] = user[key];
        }

        // 现在 clone 是带有相同内容的完全独立的对象
        clone.name = "Pete"; // 改变了其中的数据

        alert(user.name); // 原来的对象中的 name 属性依然是 John
    </script>
</body>

</html>